クラスメソッドブログの内側 #1
7月8日に公開したクラスメソッドブログですが、フッターにロゴのあるAWS(Amazon Web Services)上で動いています。サーバー関係はまったくの素人と言って良いほどのレベルですが、サーバー環境の構築からデザイン、テンプレート作成、運用準備を終わらせ、なんとか運用まで漕ぎ着けました。構築期間はテスト運用期間とバッファをとって3週間ほどです。
そこで、今回はAWSの構成に加え、5つのブログをどのように作ったか複数回にまとめて素人なり紹介していきたいと思います。今回は全体の構成について紹介します。
構成
まずは全体の構成について。
今回ブログを5つ立ち上げました。それぞれ独立したインスタンスを使用しています。理由は後述します。
AWS
レンタルサーバーとは違い若干値がはるためAWSはできるだけ費用を抑えた構成にします。とは言っても、後々拡張が必要になった際に困らないような構成にしておきます。インスタンスを分けた理由は、あるブログのアクセスが増えた場合でも個別に調整できるようにするためです(1つのインスタンスにすべてつめこんで調整するスキルがないというのが本当の理由・・・)。
EC2 | Webサーバ |
---|---|
RDS | データベース |
S3 | アップロードされたファイルの保存 |
EC2
EC2にはBasic 64-bit Amazon Linux AMIを選択しています。Linuxは個人でさくらVPSを借りてごにょごにょしていたのですんなりできました。
細かい構成はこんな感じ。また、EC2はいつ壊れてもおかしくないので定期的にAMIを作成します。
Instances | 1 |
---|---|
Availability Zone | No Preference |
Instance Type | Micro(613 MB) |
実際に立ち上げたEC2のインスタンス一覧
Webサーバ
LinuxにはApache、PHP、MySQLをインストールしました。MySQLはRDSを使うので不要なのですが、一応入れてあります。
Apache、PHP上でWordpressを動かすため、追加で画像処理用にGDモジュール、マルチバイト処理用にmbstringモジュールを別途インストールしています。
また、高速化のためにeAcceleratorをインストールして、ApacheとPHPのチューニングを見よう見まねで行いました。
RDS
RDSは1つのインスタンスで5つのブログのDBとして処理させます。RDSまで5つに分けると金額も5倍になり負荷の割にはコストが高くついてしまいます。キャッシュも利用するので現状の負荷であれば、1つのインスタンスで十分です。
S3
S3は記事に挿入される画像やSWFファイルなどのアップロードされたファイルを保存しています。
WordPressとの連携にはプラグインを利用しています。CDNとしてCloud Frontも利用したかったのですが、利用予定のプラグインが対応していなかったため、ひとまずS3のみ利用しています。
ファイルは直接EC2上に保存させることもできますが、EC2のインスタンスはいつ壊れるかわからないので、SLA(サービスレベル保証)99.9%のS3に保存しておくのが安全です。とりあえずはインスタンスが壊れてファイルが消えてしまうことは防ぐことができています。S3についてくわしくはこちらの「Amazon S3 の低冗長化ストレージ」に詳しく書かれています。
WordPress上の構成
今回Wordpressのバージョン3.1を使いました。
重視したことは、管理面を効率的にしつつも多機能であり、実際に記事を執筆する方の使いやすさ、自由度も最大化し楽しく記事を書けること。
また、技術者にも、非技術者の方にもできる限り使いやすいよう調節しました。
詳しくは別の回で説明するので、今回は要点のみあげていきます。
テンプレート
ブログ用のテンプレートを1つ作成し、Wordpressの管理画面で背景やロゴなどを個別に設定できるようにしています。テンプレートを5つに分けていたら改修時に5回も同じことを繰り返さないといけないため非効率です。
プラグインなどを使い実現したこと
- 細かなユーザー権限の管理
- 承認フローの実現
- 複雑なコンテンツでも簡単に貼り付けるためのショートコード
- 効率的に管理できるテンプレート
- 開発者、非開発者どちらでも書きやすく
- スマートフォン対応
- iPad対応
記事に利用できるHTMLやショートコードはこちらにまとめています。
全体的な作りはこんな感じになっています。
AWSを使って高負荷時の拡張性を持たせデータ保持の信頼性、構築・管理の効率化、Wordpressのカスタマイズで管理、執筆のしやすさの両面を低コストで実現することができました(たぶん・・・)。
全体の構成はここまでにし、次回は個々の細かい構成についてご紹介したいと思います。